Curve25519 in Cryptree
結論として採用モジュール未決定
CryptreeにどうCurve25519が使われているかも不透明
どちらも推測
採用モジュールはcurve25519-dalekクレートが良さそう?
鍵共有 key exchange
公開鍵暗号
Curve25519 boxer
Curve25519は、二つの当事者が安全な共有秘密(セッションキーなど)を生成するために使用される楕円曲線暗号化アルゴリズムです。
このプロセスは、通信の暗号化に使われるキーを安全に交換することを可能にし、中間者攻撃などのセキュリティ脅威から保護します。
RSAやECDHE(楕円曲線Diffie-Hellman鍵交換)が使われているかも
使われてない
128ビットのセキュリティを確保できる
curve25519の推奨曲線について
サイドチャネル攻撃に対する耐性: 実装は、タイミング攻撃やキャッシュ攻撃など、幅広いサイドチャネル攻撃に対して耐性を持つように設計されています。例えば、メモリアクセスやジャンプのパターンが秘密鍵のビット値に依存しないようにすること、または乗算などの算術操作が入力に基づいて変化しないようにすることが重要です。
定数時間実装: サイドチャネル攻撃に対する防御の一環として、すべての秘密鍵に対して同じシーケンスのフィールド操作が実行されるように、アルゴリズムが設計されています。これにより、実装が秘密鍵のビット値に基づいて変化することがなくなります。
入力値の正規化: X25519関数は、入力として非正規化値を受け入れ、それらをフィールド素数で割った余りとして処理します。特に、X25519では、最後のバイトの最上位ビットをマスクしてゼロに設定する必要があります。
コファクターのチェック: Curve25519とCurve448は、それぞれ8と4のコファクターを持っています。これは、入力点が小さい順序の場合に共有シークレットがゼロ値になる可能性があることを意味します。プロトコル設計者は、このようなケースを検出し、必要に応じて処理を中止するようにする必要があります。
ベースポイントの選択: Curve25519のベースポイントは、正しい部分群内で最小の正のu値を持つ点です。これは、安全な鍵交換プロトコルを設計する際に重要な要素です。
これらのポイントに加えて、効率的で安全な乗算アルゴリズム(モンゴメリ乗算など)の実装、適切なランダム数生成機構の使用、そして可能であれば、既存のテストベクトルを使用した実装の検証も重要です。
見るべきセクション
Section 6.1 (Curve25519): このセクションでは、Curve25519を使用したDiffie-Hellman鍵交換プロトコルの具体的な実装方法について説明しています。ここでは、プライベート鍵とパブリック鍵の生成方法、共有シークレットの計算プロセスが詳細に記載されています。また、安全な鍵交換のための推奨事項や実装上の注意点についても触れられています。
Section 5 (The X25519 and X448 Functions): Curve25519の核となるスカラー乗算関数X25519についての詳細が記載されています。鍵交換プロトコルの実装においては、この関数が中心的な役割を果たします。入力と出力のエンコーディング、アルゴリズムのステップバイステップの説明が含まれており、実装の際に必要な情報が提供されています。
Section 5.1 (Side-Channel Considerations): サイドチャネル攻撃に対する防御は、鍵共有プロトコルの実装において重要な考慮事項です。このセクションでは、実装をサイドチャネル攻撃から保護するための推奨事項が提供されています。
Section 5.2 (Test Vectors) を利用して実装の正確性を検証
curve25519-dalek
定数時間操作:curve25519-dalekは、タイミング攻撃を軽減するために、その暗号操作に対して定数時間の実装を提供することを目指しています。これは、暗号ソフトウェアの一般的な脆弱性です。
変更ログ
脆弱性の報告なし
-> x25519-dalek: Curve25519上の楕円曲線Diffie-Hellman鍵交換
rust-crypto
保守がされていない可能性あり
sodiumoxide: sodiumoxideは、libsodiumのRustバインディングです。
Curve25519とX25519は密接に関連していますが、それぞれに特定の用途があります。Curve25519は楕円曲線そのものを指し、X25519はその楕円曲線を用いたDiffie-Hellman鍵交換メカニズムを指します。ここでは、それぞれの特性と強み、弱点について解説します。
Curve25519
用途: 楕円曲線暗号(ECC)に基づいた暗号化アルゴリズム。
強み:
セキュリティ: 高いセキュリティレベルを提供し、一般的な攻撃方法に対して強固です。
効率: 楕円曲線演算の効率が良く、少ない計算リソースで高速に動作します。
弱点:
用途の限定性: 楕円曲線としてのCurve25519は、その性質やパラメータが特定の暗号技術(例えば、X25519やEd25519)に適用されるため、そのままでは多様な暗号プロトコルに適用することは限られます。
X25519
用途: Curve25519楕円曲線を基にしたDiffie-Hellman鍵交換。
強み:
簡素化された鍵交換: X25519は鍵交換プロセスを簡素化し、実装が容易であるため、幅広い環境での採用が進んでいます。
高い互換性と実用性: 一般的な通信プロトコルでの使用に適しており、SSL/TLSなどのセキュアな通信の確立に貢献します。
弱点:
特定の用途に限定: X25519は鍵交換メカニズムに特化しているため、暗号化や署名など他の目的には直接使用されません。そのため、これらの用途ではEd25519など他のアルゴリズムが使用されます。